#ifndef KEY_BOARD_4X4_H
#define KEY_BOARD_4X4_H
#ifdef __cplusplus
extern "C"
{
#endif
    /****************************************************************/
    /*
        8051系列keil 4*4矩阵键盘库 By 启凡科创。
        使用前请确保当前IO已经初始化为弱上拉准双向口
        Version:1.0.1 2022-2-7
    */
    /****************************************************************/

#include "LIB_CONFIG.h"
#ifndef KEYBOARD_EN
#define KEYBOARD_EN 0 // 如果配置文件未定义，则用户自定义，0禁用模块不不编译，1启用模块
#endif

#if KEYBOARD_EN

#define KEY_GPIO P1 // 矩阵键盘连接的端口

// 根据自己的硬件更改实际接线顺序定义
#define KEY_BOARD_ROW_USE_MSB_OR_LSB 0 // 矩阵键盘的列接入的是高4位还是低四位，0为低四位，1为高四位
#define KEY_BOARD_ROW_IS_L_TO_H 1      // 矩阵键盘的列接线从左到右为：0：从低到高，1：从高到低
#define KEY_BOARD_LINE_IS_L_TO_H 1     // 矩阵键盘的行接线从上到下为：0：从低到高，1：从高到低

    // 按键返回的数据类型
    typedef enum
    {
        key_num_0,
        key_num_1,
        key_num_2,
        key_num_3,
        key_num_4,
        key_num_5,
        key_num_6,
        key_num_7,
        key_num_8,
        key_num_9,
        key_delete,
        key_ok,
        key_up,
        key_down,
        key_left,
        key_right,
        key_not_press
    } key_board_4x4_value;

    /*
        请对应修改下面类型中定义的名称数值
        矩阵键盘的具体数值排布为左上角开始为0，从左向右，从上到下依次到15
        根据自己的项目分配修改 默认按键排布为：
        1   2   3   up
        4   5   6   down
        7   8   9   left
        x   0   ok  right
    */
    typedef enum
    {
        // 按键获取到的行，列
        key_0_0 = key_num_1,
        key_0_1 = key_num_2,
        key_0_2 = key_num_3,
        key_0_3 = key_up,
        key_1_0 = key_num_4,
        key_1_1 = key_num_5,
        key_1_2 = key_num_6,
        key_1_3 = key_down,
        key_2_0 = key_num_7,
        key_2_1 = key_num_8,
        key_2_2 = key_num_9,
        key_2_3 = key_left,
        key_3_0 = key_delete,
        key_3_1 = key_num_0,
        key_3_2 = key_ok,
        key_3_3 = key_right,

    } key_board_get_value;

    /*
        读取按键值，key_board_4x4_value里面的自定义键名
    */
    key_board_4x4_value get_key_board();

#endif
#ifdef __cplusplus
}
#endif
#endif
